package analisadorSintatico;

import java.util.ArrayList;
import java.util.List;

import analisadorLexico.Token;

/**
 * @author Alan L Cardoso Classe para armazernar os atributos e métodos do no
 *         link{@Node}
 */
public class Node {

	private Node pai;
	private List<Node> filhos = new ArrayList<Node>();
	private TipoNode tipo;
	private Token token;

	public Node() {
	}

	public Node(TipoNode tipo) {
		this.tipo = tipo;
	}

	public Node(TipoNode tipo, Token token) {
		this.tipo = tipo;
		this.token = token;
	}

	public void addFilho(Node filho) {
		if (filho != null) {
			filho.setPai(this);
		}
		filhos.add(filho);
	}

	public Node getFilho(Integer indice) {
		return filhos.get(indice);
	}

	public Node getPai() {
		return pai;
	}

	public void setPai(Node pai) {
		this.pai = pai;
	}

	public List<Node> getFilhos() {
		return filhos;
	}

	public void setFilhos(List<Node> filhos) {
		this.filhos = filhos;
	}

	public TipoNode getTipo() {
		return tipo;
	}

	public void setTipo(TipoNode tipo) {
		this.tipo = tipo;
	}

	public Token getToken() {
		return token;
	}

	public void setToken(Token token) {
		this.token = token;
	}

	@Override
	public String toString() {
		if (tipo == TipoNode.TOKEN) {
			return token.toString();
		}
		return tipo.toString();
	}

}
